Computing devices typically utilize three categories of memory; slow-speed, high-capacity storage memory, faster, lower-capacity main memory, and even faster and lower-capacity cache memory. Main memory is typically used by a processor during execution of an application to store data for the application and access previously stored data for the application. Thus, the performance and capabilities of main memory have a significant impact on the performance and efficiency of applications and computing devices.
Because main memory greatly benefits from being able to read and write data non-sequentially, modern computing devices use random access memory (RAM) for main memory. Dynamic random access memory (DRAM) is one example of a type of RAM used as main memory. DRAM may need to be refreshed periodically to keep the data stored from being lost. DRAM is also volatile memory, meaning the information stored on DRAM is lost when the memory is powered off. Accordingly, non-volatile random access memory (NVRAM) is another type of RAM that can be used as part of some computer main memory systems. Because NVRAM is non-volatile, it keeps the information stored even when powered off. NVRAM also has different read and write speeds when compared to DRAM.
In certain computing devices, a combination of NVRAM and DRAM may be used to provide main memory for the computing devices. When using NVRAM as part of main memory, it may be desirable to determine which applications run most efficiently using NVRAM and which applications run most efficiently using DRAM, in order to allocate memory resources between applications more efficiently. However, merely allocating only NVRAM or only DRAM to an application for use may not result in an efficient memory allocation. Therefore, systems and methods are needed for applications to be mapped to DRAM and NVRAM more effectively and efficiently.